package com.ccc.scala.base6_object

import scala.beans.BeanProperty

object Object03_Field {
  def main(args: Array[String]): Unit = {
    // 面向对象 - 属性

    // 所谓的属性就是类中的变量
    // 在编译时，编译器会将变量编译为类的（私有的）属性，
    // 同时提供了相对于属性的set和get方法 （不叫get和set）
    val test = new Test()
    // 给类的属性赋值，等同于调用他的set方法
    test.name = "JC"
    // 同理 get方法
    println(test.name)

    // val声明的属性，在编译时会添加final关键字，编译器不会提供属性的set方法
    // test.age = 23 // ERROR

    // Scala中给属性提供的set，get方法不遵循bean规范
    // 为了 可以使用注解 @BeanProperty 在Scala的类中给属性添加get set 方法
    test.setEmail("1234")
    println(test.getEmail)

  }

  class Test {
    var name: String = "CJ"
    val age: Int = 24

    // Scala中变量必须显式的初始化
    // var email: String // ERROR

    // 如果希望类的属性和Java一样可以和Java一样由系统初始化，手动赋值，可以使用特殊符号：下划线 _

    @BeanProperty var email: String = _


  }
}
